10 UVA11332 Summing Digits
內容
對於所有正整數
,我們定義一函數
為
的每一個十進位數字的總和,若再把
代入函數中可得最到
最後得到僅有一位數字的值,並定義該值為
。
例如,當 n = 1234567892
,則:
f(n) = 1+2+3+4+5+6+7+8+9+2 = 47
f(f(n)) = 4 + 7 = 11
f(f(f(n))) = 1 + 1 = 2
所以,g(1234567892) = 2
。
輸入說明
輸入的每一行會有一個正整數
,其值最大到
,你必須輸出
。輸入是以
值做為結束,該值不需要輸出。
輸出說明
如輸入所述。
範例輸入 #1
2
11
47
1234567892
0
範例輸出 #1
2
2
2
2
題意:對於所有正整數 n ,我們定義一函數 f(n) 為 n 的每一個十進位數字的總和,若再把 f(n) 代入函數中可得最到 n,f(n),f(f(n)),f(f(f(n)))… 最後得到僅有一位數字的值,並定義該值為 g(n)
解題:題目有給相加的過程
#定義一個函數,用於計算一個整數的各個數位之和
def abc(i):
m = 0 # 初始化變數m,用於存儲各個數位之和
while i > 0: # 當i大於0時,繼續執行循環
m += i % 10 # 將i的最後一個數位取出並加到m中
i //= 10 # 刪除i的最後一個數位
return m # 返回各個數位之和
#進入主循環,持續讀取用戶輸入的整數
while True:
try:
i = int(input()) # 嘗試從用戶獲取一個整數
if i == 0: # 如果用戶輸入0,則退出主循環
break
#進入一個內部循環,當i大於等於10時持續執行
while i >= 10:
i = abc(i) #使用abc函數計算i的各個數位之和,將結果賦值給i
print(i) #輸出i,即各個數位之和
except EOFError:
break #當達到文件結束時退出主循環